package cl.zeke.cursos.jsf2spring3jpa2.dao;

import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Persona;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

@Repository
public class Ejercicio6PersonaDao {
    
    @PersistenceContext
    private EntityManager em;

    public List<Persona> buscar(
            Integer rut, 
            String nombre, 
            Date fechaNacInferior, 
            Date fechaNacSuperior, 
            String email) 
    {
        Session hibernateSession = 
                (Session) em.getDelegate();
        Criteria criteria = hibernateSession
                .createCriteria(Persona.class, "persona");
        //select distinct
        criteria.setResultTransformer(
                Criteria.DISTINCT_ROOT_ENTITY); 
        
        if(rut != null) {
            criteria.add(Restrictions.eq("rut", rut));
        }
        if(nombre != null) {
            criteria.add(Restrictions.ilike(
                    "nombre", nombre, MatchMode.ANYWHERE));
        }
        if(fechaNacInferior != null) {
            criteria.add(Restrictions.ge(
                    "fechaNacimiento", fechaNacInferior));
        }
        if(fechaNacSuperior != null) {
            criteria.add(Restrictions.le(
                    "fechaNacimiento", fechaNacSuperior));
        }
        if(email != null) {
            criteria.add(Restrictions.eq("email", email));
        }
        
        return criteria.list();
    }
    
}
